#include "matriz.h"
#include <iostream>

using namespace std;
//Constructor por defecto
Matriz::Matriz(){
	this->f=0;
	this->c=0;
	this->datos=0;
	
	
}
//Constructor de copia
Matriz::Matriz(const Matriz& m){
	this->f=m.f;
	this->c=m.c;
	this->datos=new int[m.f*m.c];
	for(int i=0;i<(this->f*this->c);i++)
		this->datos[i]=m.datos[i];
}
// Reserva recursos e inicializa m
Matriz::Matriz (int f, int c){
	this->f=f;
	this->c=c;
	this->datos=new int[f*c];
}

// Devuelve el número filas de m 
int Matriz::FilasMatriz ()const{return this->f;}

// Devuelve el número columnas de m
int Matriz::ColumnasMatriz ()const{return this->c;}

// Hace m(i,j)=v  
void Matriz::SetMatriz(int i, int j, int v){this->datos[(i*ColumnasMatriz())+j]=v;}        

// Devuelve m(i,j)
int Matriz::GetMatriz (int i, int j)const{return this->datos[(i*ColumnasMatriz())+j];}
//Operador =
Matriz& Matriz::operator=(const Matriz &m){
	
		if(this!=&m){
			delete [] this->datos;		
			this->f = m.f;
			this->c = m.c;
			
			if(f>0 || c>0){
				this->datos= new int [this->f*this->c];
				
				for(int i=0;i<(this->f*this->c);i++)
					this->datos[i]=m.datos[i];
			}		
		}
	
		return *this;
	
	
	

}

// Libera recursos de m
Matriz::~Matriz (){	
	if(f>0 && c>0){	
		f=0;
		c=0;
		delete[] this->datos;
	
	}

}

